package com.tito.common.framework.util;

import com.tito.common.api.query.OptChar;
import com.tito.common.api.query.QueryParams;
import com.tito.common.util.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;

public class RequestUtil {

    /**
     * 处理页面进来的请求参数。
     *
     * <pre>
     * 	1.参数字段命名规则。
     * 	a:参数名称^参数类型+条件 eg：a^VEQ 则表示，a字段是varchar类型，条件是eq ^后第一个参数为数据类型
     * 	b:参数名字^参数类型  eg：b^V则表示，b字段是varchar类型 用于sql拼参数
     * 	2.在这里构建的逻辑都是and逻辑。
     * 3.参数类型:V :字符串 varchar N:数字number D:日期date
     * 条件参数 枚举：QueryOP
     *
     * </pre>
     */
    public static QueryParams handleRequestParam(HttpServletRequest request,List<String> filters) {
        QueryParams queryParams = new QueryParams();
        Enumeration<String> paramNames = request.getParameterNames();
        String key = null;
        String value = null;
        while (paramNames.hasMoreElements()) {
            key = paramNames.nextElement();
            /*//老版本用的^但是Tomcat8 get请求不支持此类型参数。故这里做兼容使用-
            String specialSplitKey = "$";
            if (key.contains("^")) {
                specialSplitKey = "^";
            }

            if (!key.contains(specialSplitKey)) {
                continue;
            }*/

            value = request.getParameter(key);
            if (StringUtils.isEmpty(value)) {
                continue;
            }
            if(CollectionUtils.isNotEmpty(filters) && filters.contains(key))
            {
                continue;
            }
            queryParams.addParam(key,value, OptChar.EQUAL);
        }
        return queryParams;
    }

    public static String[] getStringAryByStr(String str) {
        if (StringUtils.isEmpty(str))  return null;

        String[] aryId = str.split(",");
        String[] lAryId = new String[aryId.length];
        for (int i = 0; i < aryId.length; i++) {
            lAryId[i] = (aryId[i]);
        }
        return lAryId;
    }
}
